/* Esta classe e responsavel pelos graficos. O desenho dos carros e pedestres sao atualizados
 * pelas chamadas dos metodos "desenhaCarro" e "desenhaPedestre". E possivel deslocar a 
 * faixa de pedestres alterando a variavel "faixaDePedestres".
 */

package principal;

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

import carros.Carro;
import principal.Pedestre;

public class Janela extends JFrame implements KeyListener{

	private static Janela ref;
	private static Image imagem, imagem2;
	private static final long serialVersionUID = 1L;	

	private Janela(String titulo){
		super(titulo);
		pack();
		setSize(1000, 240);
		addKeyListener(this);
		setVisible(true);
	}

	public static Janela getInstance(String titulo){
		if(ref == null) ref = new Janela(titulo);
		return ref;
	}

	public static void inicia(){
		ImageIcon icon1 = new ImageIcon("carro.jpg");
		ImageIcon icon2 = new ImageIcon("pedestre.jpg");
		imagem = icon1.getImage();
		imagem2 = icon2.getImage();

	}

	public void desenhaCarro(Carro a, int mudouDeFaixa, int quantoAnda){
		Graphics g;
		g = getGraphics();
		int x = a.getPosicao();
		int y = a.getFaixa()*30 + 70;
		if(mudouDeFaixa == 0) g.clearRect(x - quantoAnda, y, imagem.getWidth(this), imagem.getHeight(this));
		else {			
					
			g.clearRect(x - (quantoAnda), (a.getFaixa() + mudouDeFaixa)*30 + 70, imagem.getWidth(this), imagem.getHeight(this));

		}
		g.drawImage(imagem, x, y, this);
		
	}

	public void desenhaPedestre(Pedestre a){
		Graphics g;
		g = getGraphics();
		int x = Pedestre.getFaixaDePedestres() + (11 * a.getPosicaoLateral()) ;
		int y = a.getPosicao();
		g.clearRect(x, y - a.getVelocidade(), imagem2.getWidth(this), imagem2.getHeight(this) + (a.getVelocidade() * 2));
		g.drawImage(imagem2, x, y, this);
	}


	public void paint(Graphics g){
		super.paint(g);

		g.drawString("APERTE S/s para capturar um SCREENSHOT da tela", 10, 210);
	}

	public void keyPressed(KeyEvent e) {
		char keyPressed = e.getKeyChar();
		if (keyPressed == 'S' || keyPressed == 's'){
			try {

				Toolkit toolkit = Toolkit.getDefaultToolkit();
				Dimension dimension = toolkit.getScreenSize();  
				Robot robot = new Robot();
				Rectangle rect = new Rectangle(dimension); 
				BufferedImage buffer = robot.createScreenCapture(rect);

				ImageIO.write(buffer, "png", new File("screenshot.png"));


			} catch (AWTException e1) { 
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			catch (IOException e1) {
				// TODO Auto-generated catch block 
				e1.printStackTrace();
			}
		}
	}

	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}

	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub

	}
}

